import { message } from 'antd';
import api from '../../api';

export default {
  namespace: 'roleModel',
  state: {
    data: [],
    loading: true,
    userData: [], //关联用户数据
    userOriginData: [], //未处理的关联用户数据
    TreeChildren: [],
    roleMenu: [], // 角色菜单（根据角色ID获得）
    tenantData: [], // 租户数据
  },

  effects: {
    // 获取租户列表
    *SearchTenant({ payload }, { call, put }) {
      const data = yield call(api.userManageNew.SearchTenant, payload);
      if (data && data.code == 0) {
        let tempArr = [];
        data.data.dataSource &&
          data.data.dataSource.forEach((item) => {
            tempArr.push({ title: item.name, value: item.code });
          });
        yield put({
          type: 'save',
          payload: {
            tenantData: tempArr,
            loading: false,
          },
        });
      } else {
        message.error(`获取租户信息失败，失败原因：${data?.msg}`);
        console.error(`获取租户信息失败，失败原因：${data?.msg}`, '接口名称：page-query 接口：portfolio-server/tenant/page-query');
      }
    },
    // 查询角色列表数据
    *Search({ payload, callback }, { call, put }) {
      const data = yield call(api.roleManage.Search, payload);
      if (data && data.success) {
        callback(data.data);
        yield put({
          type: 'save',
          payload: {
            data: data.data,
            loading: false,
          },
        });
      } else {
        callback();
        message.error(`查询角色列表失败，失败原因：${data?.mesg}`);
        console.error(`查询角色列表失败，失败原因：${data?.mesg}`, '接口名称：condition 接口：portfolio-server/role/condition');
      }
    },

    // 2021-03-27 by zxy
    // 根据角色ID，获取角色的菜单
    *getMenuByRoleId({ payload, callback }, { call, put }) {
      const data = yield call(api.roleManage.getMenuByRoleId, payload);
      if (data && data.success) {
        yield put({
          type: 'save',
          payload: {
            roleMenu: data.data,
          },
        });
        callback(data.data);
      } else {
        message.error(`获取角色菜单失败，失败原因：${data?.mesg}`);
        console.error(`获取角色菜单失败，失败原因：${data?.mesg}`, '接口名称：getMenuById 接口：portfolio-server/role/getMenuById');
      }
    },
    // 关联菜单数据
    *SearchMenu({ payload }, { call, put }) {
      const data = yield call(api.roleManage.SearchMenu, payload);
      if (data && data.success) {
        yield put({
          type: 'save',
          payload: {
            TreeChildren: data.data,
          },
        });
      } else {
        message.error(`获取关联菜单数据失败，失败原因：${data?.mesg}`);
        console.error(`获取关联菜单数据失败，失败原因：${data?.mesg}`, '接口名称：findAll 接口：portfolio-server/menu/findAll');
      }
    },
    // 编辑时关联菜单数据
    *SearchMenu2({ payload }, { call, put }) {
      const data = yield call(api.roleManage.SearchMenu2, payload);
      if (data && data.success) {
        yield put({
          type: 'save',
          payload: {
            TreeChildren: data.data,
          },
        });
      } else {
        message.error(`根据角色id获取关联菜单数据失败，失败原因：${data?.mesg}`);
        console.error(`根据角色id获取关联菜单数据失败，失败原因：${data?.mesg}`, '接口名称：findAll2 接口：portfolio-server/menu/findAll2');
      }
    },
    // 关联用户下拉数据
    *SearchUser({ payload }, { call, put }) {
      const data = yield call(api.roleManage.SearchUser, payload);
      if (data && data.success) {
        let tempArr = [];
        data.data &&
          data.data.map((item) => {
            tempArr.push({ title: item.name, value: item.id });
          });
        yield put({
          type: 'save',
          payload: {
            userData: tempArr,
            userOriginData: data.data,
          },
        });
      } else {
        message.error(`获取用户数据失败，失败原因：${data?.mesg}`);
        console.error(`获取用户数据失败，失败原因：${data?.mesg}`, '接口名称：findAll 接口：portfolio-server/user/findAll');
      }
    },
    // 新增编辑角色
    *saveTable({ payload, callback }, { call, put }) {
      const data = yield call(api.roleManage.saveTable, payload);
      if (data && data.success) {
        callback('success');
        message.success('操作成功！');
      } else {
        message.error(`操作失败，失败原因：${data?.mesg}`);
        console.error(`操作失败，失败原因：${data?.mesg}`, '接口名称：add 接口：portfolio-server/role/add');
      }
    },
    // 删除角色
    *deleteRole({ payload, callback }, { call, put }) {
      const data = yield call(api.roleManage.deleteRole, payload);
      if (data && data.success) {
        message.success(data.mesg || '删除成功');
        callback('success');
      } else {
        callback('fail');
        message.error(`删除角色失败，失败原因：${data?.mesg}`);
        console.error(`删除角色失败，失败原因：${data?.mesg}`, '接口名称：remove 接口：portfolio-server/role/remove');
      }
    },
  },
  reducers: {
    save(state, { payload }) {
      return { ...state, ...payload };
    },
    clearState(_, { payload }) {
      return payload;
    },
  },
};
